"""
文件名:OperationData.py
作用: 对pandas读取数据进行封装, 用于后续的参数化操作
"""

import pandas
import os


class OperationData(object):
    def __init__(self, file_name: str):
        # 在init中找到文件的所在路径+位置
        # os.path.dirname(__file__)  # 上级路径
        base_path = os.path.dirname(os.path.dirname(__file__))  # 当前文件夹的上一级 == cd..
        data_path = os.path.join(base_path, "data")  # data路径
        file_path = os.path.join(data_path, file_name)  # data路径+文件名
        # 判断文件后缀
        if file_name.endswith('csv'):
            self.table = pandas.read_csv(file_path, keep_dafault_na=False)
        elif file_name.endswith('xls'):
            self.table = pandas.read_excel(file_path, keep_default_na=False)
        else:
            self.table = None
            print(f"{file_name}文件格式错误, 只能读取xls或csv格式")

    def get_data_dict(self):
        """
        读取数据为列表嵌套字典格式
        :return: list[{},{},{}...]
        """
        """data = []
        for i in self.table.index.values:  # 在pandas获取的行号中遍历
            row_data = self.table.loc[i].to_dict()  # 将读取的数据转换为字典
            data.append(row_data)  # 将行数据追加到列表中
        return data"""
        if self.table is not None:
            return [self.table.loc[i].to_dict() for i in self.table.index.values]

    def get_data_list(self):
        """
        读取数据为列表嵌套列表
        :return: list [[], [], []...]
        """
        if self.table is not None:
            return self.table.values.talist()


if __name__ == '__main__':
    operation = OperationData("userdata.csv")
    print(operation.get_data_dict())
    print(operation.get_data_list())
